import java.io.Serializable;
import java.util.ArrayList;
/**
 * La classe Transport fait parti du mini-projet "reservation".
 * Elle permet de créer des transports caractérisés par un type (avion, bus, train...),
 * une capacité de voyageur et des trajets.
 * 
 * @author Maugard Matthieu & Paeta Suzy
 * @version V 1.0.0
 */

public class Transport implements Serializable  {

		private int capaciteMax;
		private ArrayList<Trajet> trajets;
		private String nom;
		private Types type;
		
		/**
		 * Constructeur de Transport
		 * @param capaciteMax
		 * @param capaciteCourante
		 * @param trajets
		 * @param type
		 */
		Transport(String nom, int capaciteMax, ArrayList<Trajet> trajets, Types type){
			if(nom==null) throw new NullPointerException("Le nom est null");
			if(trajets==null) throw new NullPointerException("trajets est null");
			if(type==null) throw new NullPointerException("Le type est null");
			if(capaciteMax<0) throw new IllegalArgumentException("La capacité maximale ne peut pas être négative");
			this.nom=nom;
			this.capaciteMax=capaciteMax;
			this.trajets=trajets;
			this.type=type;
		}

		/**
		 * @return the capaciteMax
		 */
		public int getCapaciteMax() {
			return capaciteMax;
		}
		
		/**
		 * Ajouter un trajet à la liste des trajets
		 * @param trajet
		 */
		public void ajouterTrajet(Trajet trajet){
			if(trajet==null) throw new NullPointerException("trajet est null");
			this.trajets.add(trajet);
		}

		/**
		 * @return the trajets
		 */
		public ArrayList<Trajet> getTrajets() {
			return trajets;
		}

		/**
		 * @return the type
		 */
		public Types getType() {
			return type;
		}

		/**
		 * @return the nom
		 */
		public String getNom() {
			return nom;
		}


		public String toString() {
			
			String resu = "Capacité maximum" + capaciteMax + ", nom=" + nom + ", type=" + type + "\n" ; 
			
			for(int i=0; i<trajets.size(); i++){
				resu += "\t" + trajets.get(i).toString();
			}
			
			resu += "\n";
			
			return resu;
		}

		/**
		 * @param capaciteMax the capaciteMax to set
		 */
		public void setCapaciteMax(int capaciteMax) {
			if(capaciteMax<0) throw new IllegalArgumentException("La capacité maximale ne peut pas être négative");
			this.capaciteMax = capaciteMax;
		}

		/**
		 * @param trajets the trajets to set
		 */
		public void setTrajets(ArrayList<Trajet> trajets) {
			if(trajets==null) throw new NullPointerException("trajets est null");
			this.trajets = trajets;
		}

		/**
		 * @param nom the nom to set
		 */
		public void setNom(String nom) {
			if(nom==null) throw new NullPointerException("Le nom est null");
			this.nom = nom;
		}

		/**
		 * @param type the type to set
		 */
		public void setType(Types type) {
			if(type==null) throw new NullPointerException("Le type est null");
			this.type = type;
		}


		
		
}
